package org.example.school.utils;
import org.springframework.stereotype.Component;

import java.security.SecureRandom;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.ThreadLocalRandom;

@Component
public class LeaveCodeGenerator {

    // 1. 日期格式化器，格式为 yyMMdd
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyMMdd");

    // 2. 定义用于生成随机组合的字符集（不含 I 和 O）
    private static final char[] ALPHANUMERIC_CHARS = "ABCDEFGHJKLMNPQRSTUVWXYZ0123456789".toCharArray();

    // 3. 定义随机组合的长度
    private static final int RANDOM_PART_LENGTH = 6;
    private static final SecureRandom secureRandom = new SecureRandom();
    /**
     * 根据新规则生成订单编号
     * @param business 业务编码
     * @return 符合规则的唯一订单号
     */
    public String generate(String business,LocalDate date) {
        // 第一部分：日期 (yyMMdd)
        String datePart = date.format(DATE_FORMATTER);

        // 第二部分：6位随机字母数字组合
        StringBuilder randomPart = new StringBuilder(RANDOM_PART_LENGTH);
        for (int i = 0; i < RANDOM_PART_LENGTH; i++) {
            randomPart.append(ALPHANUMERIC_CHARS[secureRandom.nextInt(ALPHANUMERIC_CHARS.length)]);
        }

        // 拼接成最终的订单号
        return datePart + business + randomPart.toString();
    }
}